<!DOCTYPE html>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>depth_from_focus [HALCON算子参考手册]</title>
<style type="text/css">
      body {
    color: #000000;
    background-color: #ffffff;
    margin: 0;
    font-family: Arial, Helvetica, sans-serif;
}

.body_main {
    margin-left: 35px;
    margin-right: 35px;
}

@media screen and (min-width:992px) {

    .body_main {
        margin-left: 10%;
        margin-right: 10%;
    }

    table.toctable {
        width: 80%
    }
}

@media screen and (min-width:1400px) {

    .body_main {
        margin-left: 15%;
        margin-right: 15%;
    }

    table.toctable {
        width: 70%
    }
}

body>div ul ul {
    margin-left: inherit;
}

a:link {
    color: #0044cc;
}

a:link,
a:visited {
    text-decoration: none;
}

a:link:hover,
a:visited:hover {
    text-decoration: underline;
}

th {
    text-align: left;
}

h1,
h2,
h3,
h4,
h5,
h6 {
    text-rendering: optimizeLegibility;
    color: #666666;
}

code {
    font-family: monospace,monospace;
}

h1 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

h2 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

hr {
    border: 0;
    border-top: solid 1px #f28d26;
}

.pre {
    display: block;
    padding-bottom: 1ex;
    font-family: monospace;
    white-space: pre;
}

pre {
    font-family: monospace, monospace;
    padding: 1ex;
    white-space: pre-wrap;
}

.toc {
    font-size: 80%;
    border-top: 1px dashed #f28d26;
    border-bottom: 1px dashed #f28d26;
    padding-top: 5px;
    padding-bottom: 5px;
}

.inv {
    margin: 0;
    border: 0;
    padding: 0;
}

.banner {
    color: #666666;
    padding-left: 1em;
}

.logo {
    background-color: white;
}

.keyboard {
    font-size: 80%;
    padding-left: 3px;
    padding-right: 3px;
    border-radius: 5px;
    border-width: 1px;
    border-style: solid;
    border-color: #f28d26;
    background-color: #f3f3f3;
}

.warning {
    margin-top: 2ex;
    margin-bottom: 1ex;
    padding: 10px;
    text-align: center;
    border: 1px solid;
    color: #bb0000;
    background-color: #fff7f7
}

.imprint {
    margin-top: 1ex;
    font-size: 80%;
    color: #666666;
}

.imprinthead {
    font-weight: bolder;
    color: #666666;
}

.indexlink {
    text-align: right;
    padding-bottom: 5px;
}

.postscript {
    margin-top: 2ex;
    font-size: 80%;
    color: #666666
}

.evenrow {
    background-color: #e7e7ef;
    vertical-align: top;
}

.oddrow {
    background-color: #f7f7ff;
    vertical-align: top;
}

.headrow {
    background-color: #97979f;
    color: #ffffff;
    vertical-align: top;
}

.logorow {
    vertical-align: top;
}

.error {
    color: red;
}

.var {
    font-style: italic
}

.halconoperator {
    font-family: monospace, monospace;
}

span.operator {
    font-family: monospace, monospace;
}

span.procedure {
    font-family: monospace, monospace;
}

span.operation {
    font-family: monospace, monospace;
}

span.feature {
    font-family: Arial, Helvetica, Homerton, sans-serif;
}

ul {
    padding-left: 1.2em;
}

li.dot {
    list-style-type: square;
    color: #f28d26;
}

.breadcrumb {
    font-size: 80%;
    color: white;
    background-color: #062d64;
    margin-bottom: 20px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 15px;
}

.webbar {
    font-size: 80%;
    background-color: #dddddd;
    margin-top: 0px;
    margin-left: -35px;
    margin-right: -35px;
    margin-bottom: 0px;
    padding-top: 5px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 5px;
}

.footer {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    border-top: 1px dashed #f28d26;
    font-size: 80%;
    color: #666666;
    padding-bottom: 8px;
}

.footer .socialmedia a {
    padding-left: 7px;
}

.socialmedia {
    padding-top: 10px;
}

.copyright {
    margin-top: 19px;
}

.breadcrumb a {
    color: #ffffff;
    border-bottom: 1px solid white;
}

.breadcrumb a:link:hover,
.breadcrumb a:visited:hover {
    text-decoration: none;
    border-bottom: none;
}

.heading {
    margin-top: 1ex;
    font-size: 110%;
    font-weight: bold;
    color: #666666;
}

.text {
    color: black;
}

.example {
    font-size: 80%;
    background-color: #f3f3f3;
    border: 1px dashed #666666;
    padding: 10px;
}

.displaymath {
    display: block;
    text-align: center;
    margin-top: 1ex;
    margin-bottom: 1ex;
}

.title {
    float: left;
    padding-top: 3px;
    padding-bottom: 3px;
}

.signnote {
    font-family: Arial, Helvetica, Homerton, sans-serif;
    font-size: 80%;
    color: #666666;
    font-weight: lighter;
    font-style: italic
}

.par {
    margin-bottom: 1.5em;
}

.parhead {
    text-align: right;
}

.parname {
    float: left;
}

.pardesc {
    font-size: 85%;
    margin-top: 0.5em;
    margin-bottom: 0.5em;
    margin-left: 2em;
}

.parcat {
    color: #666;
    font-weight: bold;
}

*[data-if=cpp],
*[data-if=c],
*[data-if=dotnet],
*[data-if=com],
*[data-if=python] {
    display: none;
}

.tabbar {
    text-align: right;
    border-bottom: 1px solid #f28d26;
    margin-bottom: 0.5em;
}

ul.tabs {
    padding-top: 3px;
    padding-bottom: 3px;
    margin-top: 10px;
    margin-bottom: 0;
    font-size: 80%
}

ul.tabs li {
    padding-top: 3px;
    padding-bottom: 3px;
    display: inline;
    overflow: hidden;
    list-style-type: none;
    margin: 0;
    margin-left: 8px;
    border-top: 1px solid #666;
    border-left: 1px solid #666;
    border-right: 1px solid #666;
}

ul.tabs li.active {
    border-left: 1px solid #f28d26;
    border-right: 1px solid #f28d26;
    border-top: 1px solid #f28d26;
    border-bottom: 1px solid #fff;
}

ul.tabs li.inactive {
    background-color: #eee;
}

ul.tabs li a {
    padding-left: 5px;
    padding-right: 5px;
    color: #666;
}

ul.tabs li a:link:hover {
    text-decoration: none;
}

ul.tabs li.inactive a {
    color: #666;
}

ul.tabs li.active a {
    color: black;
}

dl.generic dd {
    margin-bottom: 1em;
}

.pari {
    color: olive;
}

.paro {
    color: maroon;
}

.comment {
    font-size: 80%;
    color: green;
    white-space: nowrap;
}

table.grid {
    border-collapse: collapse;
}

table.grid td {
    padding: 5px;
    border: 1px solid;
}

table.layout {
    border: 0px;
}

table.layout td {
    padding: 5px;
}

table.table {
    border-collapse: collapse;
}

table.table td {
    padding: 5px;
    border-left: 0px;
    border-right: 0px;
}

table.table tr:last-child {
    border-bottom: 1px solid;
}

table.table th {
    padding: 5px;
    border-top: 1px solid;
    border-bottom: 1px solid;
    border-left: 0px;
    border-right: 0px;
}

.details_summary {
    cursor: pointer;
}

table.toctable {
    width: 100%;
}

table.toctable col:first-child {
    width: 20%;
}

table.toctable col:nth-last-child(2) {
    width: 8%;
}

table.altcolored tr:nth-child(even) {
    background-color: #f3f3f3;
}

    </style>
<!--OP_REF_STYLE_END-->
<script>
    <!--
var active_lang='hdevelop';function switchVisibility(obj,active_lang,new_lang)
{var display_style='inline';
for(var i=0;i<obj.length;i++)
{if(obj.item(i).getAttribute('data-if')==new_lang)
{obj.item(i).style.display=display_style;}
if(obj.item(i).getAttribute('data-if')==active_lang)
{obj.item(i).style.display='none';}}
return;}
function toggleLanguage(new_lang,initial)
{if(active_lang!=new_lang)
{var lis=document.getElementsByTagName('li');for(var i=0;i<lis.length;i++)
{if(lis.item(i).id=='syn-'+new_lang)
{lis.item(i).className='active';}
else
{lis.item(i).className='inactive';}}
var divs=document.getElementsByTagName('div');var spans=document.getElementsByTagName('span');switchVisibility(divs,active_lang,new_lang);switchVisibility(spans,active_lang,new_lang);if(!initial)
{setCookie("halcon_reference_language",new_lang,null,null);}
active_lang=new_lang;}
return;}
function setCookie(name,value,domain,exp_offset,path,secure)
{localStorage.setItem(name,value);}
function getCookie(name)
{return localStorage.getItem(name);}
function initialize()
{var qs=location.href.split('?')[1];var qs_lang_raw=location.href.split('interface=')[1];var qs_lang;if(qs_lang_raw)
{qs_lang=qs_lang_raw.split('#')[0];}
var cookie_lang=getCookie("halcon_reference_language");var new_lang;if((qs_lang=="hdevelop")||(qs_lang=="dotnet")||(qs_lang=="python")||(qs_lang=="cpp")||(qs_lang=="c"))
{new_lang=qs_lang;setCookie("halcon_reference_language",new_lang,null,null);}
else if((cookie_lang=="hdevelop")||(cookie_lang=="dotnet")||(cookie_lang=="python")||(cookie_lang=="cpp")||(cookie_lang=="c"))
{new_lang=cookie_lang;}
else
{new_lang="hdevelop";}
toggleLanguage(new_lang,1);return;}
-->

  </script>
</head>
<body onload="initialize();">
<div class="breadcrumb">
<br class="inv"><a href="index.html">目录</a> / <a href="toc_3dreconstruction.html">3D Reconstruction</a> / <a href="toc_3dreconstruction_depthfromfocus.html">Depth From Focus</a><br class="inv">
</div>
<div class="body_main">
<div class="tabbar"><ul class="tabs">
<li id="syn-hdevelop" class="active"><a href="javascript:void(0);" onclick="toggleLanguage('hdevelop')" onfocus="blur()">HDevelop</a></li>
<li id="syn-dotnet" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('dotnet')" onfocus="blur()">.NET</a></li>
<li id="syn-python" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('python')" onfocus="blur()">Python</a></li>
<li id="syn-cpp" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('cpp')" onfocus="blur()">C++</a></li>
<li id="syn-c" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('c')" onfocus="blur()">C</a></li>
</ul></div>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<!--OP_REF_HEADER_END-->
<h1 id="sec_name">
<span data-if="hdevelop" style="display:inline;">depth_from_focus</span><span data-if="c" style="display:none;">depth_from_focus</span><span data-if="cpp" style="display:none;">DepthFromFocus</span><span data-if="dotnet" style="display:none;">DepthFromFocus</span><span data-if="python" style="display:none;">depth_from_focus</span> (算子名称)</h1>
<h2>名称</h2>
<p><code><span data-if="hdevelop" style="display:inline;">depth_from_focus</span><span data-if="c" style="display:none;">depth_from_focus</span><span data-if="cpp" style="display:none;">DepthFromFocus</span><span data-if="dotnet" style="display:none;">DepthFromFocus</span><span data-if="python" style="display:none;">depth_from_focus</span></code> — Extract depth using multiple focus levels.</p>
<h2 id="sec_synopsis">参数签名</h2>
<div data-if="hdevelop" style="display:inline;">
<p>
<code><b>depth_from_focus</b>(<a href="#MultiFocusImage"><i>MultiFocusImage</i></a> : <a href="#Depth"><i>Depth</i></a>, <a href="#Confidence"><i>Confidence</i></a> : <a href="#Filter"><i>Filter</i></a>, <a href="#Selection"><i>Selection</i></a> : )</code></p>
</div>
<div data-if="c" style="display:none;">
<p>
<code>Herror <b>depth_from_focus</b>(const Hobject <a href="#MultiFocusImage"><i>MultiFocusImage</i></a>, Hobject* <a href="#Depth"><i>Depth</i></a>, Hobject* <a href="#Confidence"><i>Confidence</i></a>, const char* <a href="#Filter"><i>Filter</i></a>, const char* <a href="#Selection"><i>Selection</i></a>)</code></p>
<p>
<code>Herror <b>T_depth_from_focus</b>(const Hobject <a href="#MultiFocusImage"><i>MultiFocusImage</i></a>, Hobject* <a href="#Depth"><i>Depth</i></a>, Hobject* <a href="#Confidence"><i>Confidence</i></a>, const Htuple <a href="#Filter"><i>Filter</i></a>, const Htuple <a href="#Selection"><i>Selection</i></a>)</code></p>
</div>
<div data-if="cpp" style="display:none;">
<p>
<code>void <b>DepthFromFocus</b>(const HObject&amp; <a href="#MultiFocusImage"><i>MultiFocusImage</i></a>, HObject* <a href="#Depth"><i>Depth</i></a>, HObject* <a href="#Confidence"><i>Confidence</i></a>, const HTuple&amp; <a href="#Filter"><i>Filter</i></a>, const HTuple&amp; <a href="#Selection"><i>Selection</i></a>)</code></p>
<p>
<code><a href="HImage.html">HImage</a> <a href="HImage.html">HImage</a>::<b>DepthFromFocus</b>(HImage* <a href="#Confidence"><i>Confidence</i></a>, const HTuple&amp; <a href="#Filter"><i>Filter</i></a>, const HTuple&amp; <a href="#Selection"><i>Selection</i></a>) const</code></p>
<p>
<code><a href="HImage.html">HImage</a> <a href="HImage.html">HImage</a>::<b>DepthFromFocus</b>(HImage* <a href="#Confidence"><i>Confidence</i></a>, const HString&amp; <a href="#Filter"><i>Filter</i></a>, const HString&amp; <a href="#Selection"><i>Selection</i></a>) const</code></p>
<p>
<code><a href="HImage.html">HImage</a> <a href="HImage.html">HImage</a>::<b>DepthFromFocus</b>(HImage* <a href="#Confidence"><i>Confidence</i></a>, const char* <a href="#Filter"><i>Filter</i></a>, const char* <a href="#Selection"><i>Selection</i></a>) const</code></p>
<p>
<code><a href="HImage.html">HImage</a> <a href="HImage.html">HImage</a>::<b>DepthFromFocus</b>(HImage* <a href="#Confidence"><i>Confidence</i></a>, const wchar_t* <a href="#Filter"><i>Filter</i></a>, const wchar_t* <a href="#Selection"><i>Selection</i></a>) const  <span class="signnote">
            (
            Windows only)
          </span></code></p>
</div>
<div data-if="com" style="display:none;"></div>
<div data-if="dotnet" style="display:none;">
<p>
<code>static void <a href="HOperatorSet.html">HOperatorSet</a>.<b>DepthFromFocus</b>(<a href="HObject.html">HObject</a> <a href="#MultiFocusImage"><i>multiFocusImage</i></a>, out <a href="HObject.html">HObject</a> <a href="#Depth"><i>depth</i></a>, out <a href="HObject.html">HObject</a> <a href="#Confidence"><i>confidence</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Filter"><i>filter</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Selection"><i>selection</i></a>)</code></p>
<p>
<code><a href="HImage.html">HImage</a> <a href="HImage.html">HImage</a>.<b>DepthFromFocus</b>(out <a href="HImage.html">HImage</a> <a href="#Confidence"><i>confidence</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Filter"><i>filter</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Selection"><i>selection</i></a>)</code></p>
<p>
<code><a href="HImage.html">HImage</a> <a href="HImage.html">HImage</a>.<b>DepthFromFocus</b>(out <a href="HImage.html">HImage</a> <a href="#Confidence"><i>confidence</i></a>, string <a href="#Filter"><i>filter</i></a>, string <a href="#Selection"><i>selection</i></a>)</code></p>
</div>
<div data-if="python" style="display:none;">
<p>
<code>def <b>depth_from_focus</b>(<a href="#MultiFocusImage"><i>multi_focus_image</i></a>: HObject, <a href="#Filter"><i>filter</i></a>: MaybeSequence[Union[str, int]], <a href="#Selection"><i>selection</i></a>: MaybeSequence[str]) -&gt; Tuple[HObject, HObject]</code></p>
</div>
<h2 id="sec_description">描述</h2>
<p>该算子 <code><span data-if="hdevelop" style="display:inline">depth_from_focus</span><span data-if="c" style="display:none">depth_from_focus</span><span data-if="cpp" style="display:none">DepthFromFocus</span><span data-if="com" style="display:none">DepthFromFocus</span><span data-if="dotnet" style="display:none">DepthFromFocus</span><span data-if="python" style="display:none">depth_from_focus</span></code> extracts the depth using a
focus sequence.  The images of the focus sequence have to be passed as
a multi channel image (<a href="#MultiFocusImage"><i><code><span data-if="hdevelop" style="display:inline">MultiFocusImage</span><span data-if="c" style="display:none">MultiFocusImage</span><span data-if="cpp" style="display:none">MultiFocusImage</span><span data-if="com" style="display:none">MultiFocusImage</span><span data-if="dotnet" style="display:none">multiFocusImage</span><span data-if="python" style="display:none">multi_focus_image</span></code></i></a>).  The depth for
each pixel will be returned in <a href="#Depth"><i><code><span data-if="hdevelop" style="display:inline">Depth</span><span data-if="c" style="display:none">Depth</span><span data-if="cpp" style="display:none">Depth</span><span data-if="com" style="display:none">Depth</span><span data-if="dotnet" style="display:none">depth</span><span data-if="python" style="display:none">depth</span></code></i></a> as the channel
number.  The parameter <a href="#Confidence"><i><code><span data-if="hdevelop" style="display:inline">Confidence</span><span data-if="c" style="display:none">Confidence</span><span data-if="cpp" style="display:none">Confidence</span><span data-if="com" style="display:none">Confidence</span><span data-if="dotnet" style="display:none">confidence</span><span data-if="python" style="display:none">confidence</span></code></i></a> returns a confidence
value for each depth estimation: The larger this value, the higher
the confidence of the depth estimation is.
</p>
<p><code><span data-if="hdevelop" style="display:inline">depth_from_focus</span><span data-if="c" style="display:none">depth_from_focus</span><span data-if="cpp" style="display:none">DepthFromFocus</span><span data-if="com" style="display:none">DepthFromFocus</span><span data-if="dotnet" style="display:none">DepthFromFocus</span><span data-if="python" style="display:none">depth_from_focus</span></code> selects the pixels with the best focus of
all focus levels.  The method used to extract these pixels is
specified by the parameters <a href="#Filter"><i><code><span data-if="hdevelop" style="display:inline">Filter</span><span data-if="c" style="display:none">Filter</span><span data-if="cpp" style="display:none">Filter</span><span data-if="com" style="display:none">Filter</span><span data-if="dotnet" style="display:none">filter</span><span data-if="python" style="display:none">filter</span></code></i></a> and <a href="#Selection"><i><code><span data-if="hdevelop" style="display:inline">Selection</span><span data-if="c" style="display:none">Selection</span><span data-if="cpp" style="display:none">Selection</span><span data-if="com" style="display:none">Selection</span><span data-if="dotnet" style="display:none">selection</span><span data-if="python" style="display:none">selection</span></code></i></a>.
</p>
<p>For the parameter <a href="#Filter"><i><code><span data-if="hdevelop" style="display:inline">Filter</span><span data-if="c" style="display:none">Filter</span><span data-if="cpp" style="display:none">Filter</span><span data-if="com" style="display:none">Filter</span><span data-if="dotnet" style="display:none">filter</span><span data-if="python" style="display:none">filter</span></code></i></a>, you can choose between the values
<i><span data-if="hdevelop" style="display:inline">'highpass'</span><span data-if="c" style="display:none">"highpass"</span><span data-if="cpp" style="display:none">"highpass"</span><span data-if="com" style="display:none">"highpass"</span><span data-if="dotnet" style="display:none">"highpass"</span><span data-if="python" style="display:none">"highpass"</span></i> and <i><span data-if="hdevelop" style="display:inline">'bandpass'</span><span data-if="c" style="display:none">"bandpass"</span><span data-if="cpp" style="display:none">"bandpass"</span><span data-if="com" style="display:none">"bandpass"</span><span data-if="dotnet" style="display:none">"bandpass"</span><span data-if="python" style="display:none">"bandpass"</span></i>. To determine the focus
within the image a high- or a bandpass filter can be applied. The
larger the filter response, the more in focus is the image at this
location. Compared to the highpass filter, the bandpass filter
suppresses high frequencies.  This is useful in particular in images
containing strong noise.
</p>
<p>Optionally, you can smooth the filtered image using the mean filter
by passing two additional integer values for the mask size in the
parameter <a href="#Filter"><i><code><span data-if="hdevelop" style="display:inline">Filter</span><span data-if="c" style="display:none">Filter</span><span data-if="cpp" style="display:none">Filter</span><span data-if="com" style="display:none">Filter</span><span data-if="dotnet" style="display:none">filter</span><span data-if="python" style="display:none">filter</span></code></i></a> (e.g., [<i><span data-if="hdevelop" style="display:inline">'highpass'</span><span data-if="c" style="display:none">"highpass"</span><span data-if="cpp" style="display:none">"highpass"</span><span data-if="com" style="display:none">"highpass"</span><span data-if="dotnet" style="display:none">"highpass"</span><span data-if="python" style="display:none">"highpass"</span></i>, <i>7</i>,
<i>7</i>]). This blurs the in-focus region with neighboring pixels
and thus allows to bridge small areas with no texture within the
image. Note, however, that this smoothing does not suppress noise in
the original image, since it is applied only after high- or bandpass
filtering.
</p>
<p>The parameter <a href="#Selection"><i><code><span data-if="hdevelop" style="display:inline">Selection</span><span data-if="c" style="display:none">Selection</span><span data-if="cpp" style="display:none">Selection</span><span data-if="com" style="display:none">Selection</span><span data-if="dotnet" style="display:none">selection</span><span data-if="python" style="display:none">selection</span></code></i></a> determines how the optimum focus
level is selected.  If you pass the value <i><span data-if="hdevelop" style="display:inline">'next_maximum'</span><span data-if="c" style="display:none">"next_maximum"</span><span data-if="cpp" style="display:none">"next_maximum"</span><span data-if="com" style="display:none">"next_maximum"</span><span data-if="dotnet" style="display:none">"next_maximum"</span><span data-if="python" style="display:none">"next_maximum"</span></i>,
the closest focus maximum in the neighborhood is used. In contrast,
if you pass the value <i><span data-if="hdevelop" style="display:inline">'local'</span><span data-if="c" style="display:none">"local"</span><span data-if="cpp" style="display:none">"local"</span><span data-if="com" style="display:none">"local"</span><span data-if="dotnet" style="display:none">"local"</span><span data-if="python" style="display:none">"local"</span></i>, the focus level is
determined based on the focus values of all focus levels of the
pixel.  With <i><span data-if="hdevelop" style="display:inline">'next_maximum'</span><span data-if="c" style="display:none">"next_maximum"</span><span data-if="cpp" style="display:none">"next_maximum"</span><span data-if="com" style="display:none">"next_maximum"</span><span data-if="dotnet" style="display:none">"next_maximum"</span><span data-if="python" style="display:none">"next_maximum"</span></i>, you typically achieve a
slightly smoothed and more robust result.
</p>
<p>This additional smoothing is useful if no telecentric lenses are used to
take the input images.  In this case, the position of an object will
slightly shift within the sequence.  By adding appropriate smoothing, this
effect can be partially compensated.
</p>
<h2 id="sec_attention">注意</h2>
<p>If <a href="#MultiFocusImage"><i><code><span data-if="hdevelop" style="display:inline">MultiFocusImage</span><span data-if="c" style="display:none">MultiFocusImage</span><span data-if="cpp" style="display:none">MultiFocusImage</span><span data-if="com" style="display:none">MultiFocusImage</span><span data-if="dotnet" style="display:none">multiFocusImage</span><span data-if="python" style="display:none">multi_focus_image</span></code></i></a> contains more than 255 channels (focus
levels), <a href="#Depth"><i><code><span data-if="hdevelop" style="display:inline">Depth</span><span data-if="c" style="display:none">Depth</span><span data-if="cpp" style="display:none">Depth</span><span data-if="com" style="display:none">Depth</span><span data-if="dotnet" style="display:none">depth</span><span data-if="python" style="display:none">depth</span></code></i></a> is clipped at 255, i.e. depth values higher
than 255 are ignored.
</p>
<p>If the filter mask for <a href="#Filter"><i><code><span data-if="hdevelop" style="display:inline">Filter</span><span data-if="c" style="display:none">Filter</span><span data-if="cpp" style="display:none">Filter</span><span data-if="com" style="display:none">Filter</span><span data-if="dotnet" style="display:none">filter</span><span data-if="python" style="display:none">filter</span></code></i></a> is specified with even values, the
routine uses the next larger odd values instead (this way the center of the
filter mask is always explicitly determined).
</p>
<p>If <a href="#Selection"><i><code><span data-if="hdevelop" style="display:inline">Selection</span><span data-if="c" style="display:none">Selection</span><span data-if="cpp" style="display:none">Selection</span><span data-if="com" style="display:none">Selection</span><span data-if="dotnet" style="display:none">selection</span><span data-if="python" style="display:none">selection</span></code></i></a> is set to <i><span data-if="hdevelop" style="display:inline">'local'</span><span data-if="c" style="display:none">"local"</span><span data-if="cpp" style="display:none">"local"</span><span data-if="com" style="display:none">"local"</span><span data-if="dotnet" style="display:none">"local"</span><span data-if="python" style="display:none">"local"</span></i> and <a href="#Filter"><i><code><span data-if="hdevelop" style="display:inline">Filter</span><span data-if="c" style="display:none">Filter</span><span data-if="cpp" style="display:none">Filter</span><span data-if="com" style="display:none">Filter</span><span data-if="dotnet" style="display:none">filter</span><span data-if="python" style="display:none">filter</span></code></i></a> is
set to <i><span data-if="hdevelop" style="display:inline">'highpass'</span><span data-if="c" style="display:none">"highpass"</span><span data-if="cpp" style="display:none">"highpass"</span><span data-if="com" style="display:none">"highpass"</span><span data-if="dotnet" style="display:none">"highpass"</span><span data-if="python" style="display:none">"highpass"</span></i> or <i><span data-if="hdevelop" style="display:inline">'bandpass'</span><span data-if="c" style="display:none">"bandpass"</span><span data-if="cpp" style="display:none">"bandpass"</span><span data-if="com" style="display:none">"bandpass"</span><span data-if="dotnet" style="display:none">"bandpass"</span><span data-if="python" style="display:none">"bandpass"</span></i>, <code><span data-if="hdevelop" style="display:inline">depth_from_focus</span><span data-if="c" style="display:none">depth_from_focus</span><span data-if="cpp" style="display:none">DepthFromFocus</span><span data-if="com" style="display:none">DepthFromFocus</span><span data-if="dotnet" style="display:none">DepthFromFocus</span><span data-if="python" style="display:none">depth_from_focus</span></code>
can be executed on OpenCL devices. If smoothing is enabled, the same
restrictions and limitations as for <a href="mean_image.html"><code><span data-if="hdevelop" style="display:inline">mean_image</span><span data-if="c" style="display:none">mean_image</span><span data-if="cpp" style="display:none">MeanImage</span><span data-if="com" style="display:none">MeanImage</span><span data-if="dotnet" style="display:none">MeanImage</span><span data-if="python" style="display:none">mean_image</span></code></a> apply.
</p>
<p>Note that filter operators may return unexpected results if
an image with a reduced domain is used as input. Please refer to the
chapter <a href="toc_filters.html">过滤器</a>.</p>
<h2 id="sec_execution">运行信息</h2>
<ul>
    
      <li>支持OpenCL计算设备。</li>
    
  <li>多线程类型:可重入(与非独占操作符并行运行)。</li>
<li>多线程作用域:全局(可以从任何线程调用)。</li>
  
    <li>在元组级别自动并行化。</li>
    <li>Automatically parallelized on internal data level.</li>
  
</ul>
<h2 id="sec_parameters">参数表</h2>
  <div class="par">
<div class="parhead">
<span id="MultiFocusImage" class="parname"><b><code><span data-if="hdevelop" style="display:inline">MultiFocusImage</span><span data-if="c" style="display:none">MultiFocusImage</span><span data-if="cpp" style="display:none">MultiFocusImage</span><span data-if="com" style="display:none">MultiFocusImage</span><span data-if="dotnet" style="display:none">multiFocusImage</span><span data-if="python" style="display:none">multi_focus_image</span></code></b> (input_object)  </span><span>multichannel-image(-array) <code>→</code> <span data-if="hdevelop" style="display:inline">object</span><span data-if="dotnet" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="python" style="display:none">HObject</span><span data-if="cpp" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="c" style="display:none">Hobject</span> (byte)</span>
</div>
<p class="pardesc">Multichannel gray image consisting of multiple
focus levels.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Depth" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Depth</span><span data-if="c" style="display:none">Depth</span><span data-if="cpp" style="display:none">Depth</span><span data-if="com" style="display:none">Depth</span><span data-if="dotnet" style="display:none">depth</span><span data-if="python" style="display:none">depth</span></code></b> (output_object)  </span><span>singlechannelimage(-array) <code>→</code> <span data-if="hdevelop" style="display:inline">object</span><span data-if="dotnet" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="python" style="display:none">HObject</span><span data-if="cpp" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="c" style="display:none">Hobject *</span> (byte)</span>
</div>
<p class="pardesc">Depth image.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Confidence" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Confidence</span><span data-if="c" style="display:none">Confidence</span><span data-if="cpp" style="display:none">Confidence</span><span data-if="com" style="display:none">Confidence</span><span data-if="dotnet" style="display:none">confidence</span><span data-if="python" style="display:none">confidence</span></code></b> (output_object)  </span><span>singlechannelimage(-array) <code>→</code> <span data-if="hdevelop" style="display:inline">object</span><span data-if="dotnet" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="python" style="display:none">HObject</span><span data-if="cpp" style="display:none"><a href="HImage.html">HImage</a></span><span data-if="c" style="display:none">Hobject *</span> (byte)</span>
</div>
<p class="pardesc">Confidence of depth estimation.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Filter" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Filter</span><span data-if="c" style="display:none">Filter</span><span data-if="cpp" style="display:none">Filter</span><span data-if="com" style="display:none">Filter</span><span data-if="dotnet" style="display:none">filter</span><span data-if="python" style="display:none">filter</span></code></b> (input_control)  </span><span>string(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">MaybeSequence[Union[str, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>string</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>HString</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>char*</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Filter used to find sharp pixels.</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">'highpass'</span>
    <span data-if="c" style="display:none">"highpass"</span>
    <span data-if="cpp" style="display:none">"highpass"</span>
    <span data-if="com" style="display:none">"highpass"</span>
    <span data-if="dotnet" style="display:none">"highpass"</span>
    <span data-if="python" style="display:none">"highpass"</span>
</p>
<p class="pardesc"><span class="parcat">Suggested values:
      </span><span data-if="hdevelop" style="display:inline">'highpass'</span><span data-if="c" style="display:none">"highpass"</span><span data-if="cpp" style="display:none">"highpass"</span><span data-if="com" style="display:none">"highpass"</span><span data-if="dotnet" style="display:none">"highpass"</span><span data-if="python" style="display:none">"highpass"</span>, <span data-if="hdevelop" style="display:inline">'bandpass'</span><span data-if="c" style="display:none">"bandpass"</span><span data-if="cpp" style="display:none">"bandpass"</span><span data-if="com" style="display:none">"bandpass"</span><span data-if="dotnet" style="display:none">"bandpass"</span><span data-if="python" style="display:none">"bandpass"</span>, 3, 5, 7, 9</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Selection" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Selection</span><span data-if="c" style="display:none">Selection</span><span data-if="cpp" style="display:none">Selection</span><span data-if="com" style="display:none">Selection</span><span data-if="dotnet" style="display:none">selection</span><span data-if="python" style="display:none">selection</span></code></b> (input_control)  </span><span>string(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">MaybeSequence[str]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string)</span><span data-if="dotnet" style="display:none"> (<i>string</i>)</span><span data-if="cpp" style="display:none"> (<i>HString</i>)</span><span data-if="c" style="display:none"> (<i>char*</i>)</span></span>
</div>
<p class="pardesc">Method used to find sharp pixels.</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">'next_maximum'</span>
    <span data-if="c" style="display:none">"next_maximum"</span>
    <span data-if="cpp" style="display:none">"next_maximum"</span>
    <span data-if="com" style="display:none">"next_maximum"</span>
    <span data-if="dotnet" style="display:none">"next_maximum"</span>
    <span data-if="python" style="display:none">"next_maximum"</span>
</p>
<p class="pardesc"><span class="parcat">List of values:
      </span><span data-if="hdevelop" style="display:inline">'local'</span><span data-if="c" style="display:none">"local"</span><span data-if="cpp" style="display:none">"local"</span><span data-if="com" style="display:none">"local"</span><span data-if="dotnet" style="display:none">"local"</span><span data-if="python" style="display:none">"local"</span>, <span data-if="hdevelop" style="display:inline">'next_maximum'</span><span data-if="c" style="display:none">"next_maximum"</span><span data-if="cpp" style="display:none">"next_maximum"</span><span data-if="com" style="display:none">"next_maximum"</span><span data-if="dotnet" style="display:none">"next_maximum"</span><span data-if="python" style="display:none">"next_maximum"</span></p>
<p class="pardesc"><span class="parcat">List of values (for compute devices):
      </span><span data-if="hdevelop" style="display:inline">'local'</span><span data-if="c" style="display:none">"local"</span><span data-if="cpp" style="display:none">"local"</span><span data-if="com" style="display:none">"local"</span><span data-if="dotnet" style="display:none">"local"</span><span data-if="python" style="display:none">"local"</span></p>
</div>
<h2 id="sec_example_all">Example (C++ (HALCON 5.0-10.0))</h2>
<pre class="example">
compose3(Focus0,Focus1,Focus2,&amp;MultiFocus);
depth_from_focus(MultiFocus,&amp;Depth,&amp;Confidence,'highpass','next_maximum');
mean_image(Depth,&amp;Smooth,15,15);
select_grayvalues_from_channels(MultiChannel,Smooth,SharpImage);
threshold(Confidence,HighConfidence,10,255);
reduce_domain(SharpImage,HighConfidence,ConfidentSharp);
</pre>
<h2 id="sec_predecessors">可能的前置算子</h2>
<p>
<code><a href="compose2.html"><span data-if="hdevelop" style="display:inline">compose2</span><span data-if="c" style="display:none">compose2</span><span data-if="cpp" style="display:none">Compose2</span><span data-if="com" style="display:none">Compose2</span><span data-if="dotnet" style="display:none">Compose2</span><span data-if="python" style="display:none">compose2</span></a></code>, 
<code><a href="compose3.html"><span data-if="hdevelop" style="display:inline">compose3</span><span data-if="c" style="display:none">compose3</span><span data-if="cpp" style="display:none">Compose3</span><span data-if="com" style="display:none">Compose3</span><span data-if="dotnet" style="display:none">Compose3</span><span data-if="python" style="display:none">compose3</span></a></code>, 
<code><a href="compose4.html"><span data-if="hdevelop" style="display:inline">compose4</span><span data-if="c" style="display:none">compose4</span><span data-if="cpp" style="display:none">Compose4</span><span data-if="com" style="display:none">Compose4</span><span data-if="dotnet" style="display:none">Compose4</span><span data-if="python" style="display:none">compose4</span></a></code>, 
<code><a href="add_channels.html"><span data-if="hdevelop" style="display:inline">add_channels</span><span data-if="c" style="display:none">add_channels</span><span data-if="cpp" style="display:none">AddChannels</span><span data-if="com" style="display:none">AddChannels</span><span data-if="dotnet" style="display:none">AddChannels</span><span data-if="python" style="display:none">add_channels</span></a></code>, 
<code><a href="read_image.html"><span data-if="hdevelop" style="display:inline">read_image</span><span data-if="c" style="display:none">read_image</span><span data-if="cpp" style="display:none">ReadImage</span><span data-if="com" style="display:none">ReadImage</span><span data-if="dotnet" style="display:none">ReadImage</span><span data-if="python" style="display:none">read_image</span></a></code>, 
<code><a href="read_sequence.html"><span data-if="hdevelop" style="display:inline">read_sequence</span><span data-if="c" style="display:none">read_sequence</span><span data-if="cpp" style="display:none">ReadSequence</span><span data-if="com" style="display:none">ReadSequence</span><span data-if="dotnet" style="display:none">ReadSequence</span><span data-if="python" style="display:none">read_sequence</span></a></code>
</p>
<h2 id="sec_successors">可能的后置算子</h2>
<p>
<code><a href="select_grayvalues_from_channels.html"><span data-if="hdevelop" style="display:inline">select_grayvalues_from_channels</span><span data-if="c" style="display:none">select_grayvalues_from_channels</span><span data-if="cpp" style="display:none">SelectGrayvaluesFromChannels</span><span data-if="com" style="display:none">SelectGrayvaluesFromChannels</span><span data-if="dotnet" style="display:none">SelectGrayvaluesFromChannels</span><span data-if="python" style="display:none">select_grayvalues_from_channels</span></a></code>, 
<code><a href="mean_image.html"><span data-if="hdevelop" style="display:inline">mean_image</span><span data-if="c" style="display:none">mean_image</span><span data-if="cpp" style="display:none">MeanImage</span><span data-if="com" style="display:none">MeanImage</span><span data-if="dotnet" style="display:none">MeanImage</span><span data-if="python" style="display:none">mean_image</span></a></code>, 
<code><a href="binomial_filter.html"><span data-if="hdevelop" style="display:inline">binomial_filter</span><span data-if="c" style="display:none">binomial_filter</span><span data-if="cpp" style="display:none">BinomialFilter</span><span data-if="com" style="display:none">BinomialFilter</span><span data-if="dotnet" style="display:none">BinomialFilter</span><span data-if="python" style="display:none">binomial_filter</span></a></code>, 
<code><a href="gauss_filter.html"><span data-if="hdevelop" style="display:inline">gauss_filter</span><span data-if="c" style="display:none">gauss_filter</span><span data-if="cpp" style="display:none">GaussFilter</span><span data-if="com" style="display:none">GaussFilter</span><span data-if="dotnet" style="display:none">GaussFilter</span><span data-if="python" style="display:none">gauss_filter</span></a></code>, 
<code><a href="threshold.html"><span data-if="hdevelop" style="display:inline">threshold</span><span data-if="c" style="display:none">threshold</span><span data-if="cpp" style="display:none">Threshold</span><span data-if="com" style="display:none">Threshold</span><span data-if="dotnet" style="display:none">Threshold</span><span data-if="python" style="display:none">threshold</span></a></code>
</p>
<h2 id="sec_see">参考其它</h2>
<p>
<code><a href="count_channels.html"><span data-if="hdevelop" style="display:inline">count_channels</span><span data-if="c" style="display:none">count_channels</span><span data-if="cpp" style="display:none">CountChannels</span><span data-if="com" style="display:none">CountChannels</span><span data-if="dotnet" style="display:none">CountChannels</span><span data-if="python" style="display:none">count_channels</span></a></code>
</p>
<h2 id="sec_module">模块</h2>
<p>
3D Metrology</p>
<!--OP_REF_FOOTER_START-->
<hr>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<div class="footer">
<div class="copyright">HALCON算子参考手册 Copyright © 2015-2023 51Halcon</div>
</div>
</div>
</body>
</html>
